package com.yifeng.servlet;

import com.yifeng.common.Result;
import com.yifeng.factory.ServiceFactory;
import com.yifeng.service.NewsService;

import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/news/list")
public class NewsListServlet extends BaseServlet {

    /*
    负责人：xiaoq

    功能：通过服务工厂获取 NewsService 实例，用于调用分页查询新闻列表的业务方法

    参数：无

    返回值:无
    */
    private final NewsService newsService = ServiceFactory.getNewsService();

    /*
    负责人：xiaoq

    功能：处理前台新闻分页列表请求，从 URL 参数中解析 pageNum 和 pageSize，调用服务层获取分页新闻数据并返回 JSON 响应

    参数：req - HTTP 请求对象，包含可选的 pageNum 和 pageSize 查询参数；resp - HTTP 响应对象

    返回值:无（通过 writeJson 输出 Result 封装的新闻列表或错误信息）
    */
    @Override
    protected void doHandle(HttpServletRequest req, HttpServletResponse resp) throws IOException {

        // 获取分页参数，默认第1页，每页10条
        int pageNum=getIntParameter(req, "pageNum", 1);
        int pageSize=getIntParameter(req, "pageSize", 10);

        //校验参数有效性
        if(pageNum<1){
            fail(resp,"页码必须大于0");
            return;
        }
        if(pageSize<1 || pageSize>=100){
            fail(resp,"每页条数必须在1-100之间");
            return;
        }

        //调用服务层获取分页新闻列表
        try{
            Result result=newsService.getAllNewsWithPagination(pageNum,pageSize);
            writeJson(resp,result);
        } catch (Exception e){
            fail(resp,"获取新闻列表失败:"+e.getMessage());
        }
    }

    /*
    负责人：xiaoq

    功能：安全地从 HttpServletRequest 中获取整数类型的参数，若参数无效则返回默认值

    参数：req - HTTP 请求对象；paramName - 需要获取的参数名称；defaultValue - 参数无效时的默认值

    返回值:有效的正整数值，或 defaultValue
    */
    private int getIntParameter(HttpServletRequest req, String paramName, int defaultValue) {

        //需要参数的名称
        String paramValue = req.getParameter(paramName);
        if (paramValue == null || paramValue.trim().isEmpty()) {
            return defaultValue;
        }

        try{
            int value = Integer.parseInt(paramValue);
            return value>0 ? value:defaultValue;
        } catch (NumberFormatException e){
            return defaultValue;
        }

    }
}